﻿package Game.MapSystem{
	import Game.Utils.FileLoader;
	import Game.Utils.T;
	import Game.Manager;
	import Game.DisplaySystem.DisplayManager;
	public class MapManager extends Manager {
		
		private var m_DisplayManager:DisplayManager;
		
		//La Map est conservée dans ce tableau a_Map
		//je conseille un second tableau a_UnityMap contenant les objets de la carte (vehicules/batiments)
		private var a_GroundMap:Array;//-> Contient la map des sols 
		private var a_ObjectMap:Array;
		
		//Varibales de taille et d'origine de la map
		public static const ORIGIN_X:int=0;
	    public static const ORIGIN_Y:int=200;
		public static const SIZE_X:int=80;
		public static const SIZE_Y:int=40;
		
		/**-------------Constructeur--------------
		parametres : _parentObj-> Objet parent (cf Manager.as)
					_displayManager -> reference au display Manager
		*/
		public function MapManager(_parentObj:*,_displayManager:DisplayManager):void{
			super(_parentObj);
			m_DisplayManager = _displayManager;
			a_GroundMap= new Array();
		}
		
		//fonction de lancement du chargement de la map.
		//La map est chargée par le xmlManager et ensuite traitée par onMapLoaded
		public function showGroundMap(_xmladress:String):void {
			FileLoader.LoadObject(_xmladress,onMapLoaded,'xml');
		}

		//Fonction de traitement  des données xml de la map.
		//enregistrement de la map dans a_GroundMap et lancement de l'affichage
		public function onMapLoaded(_datas:XML):void {
			//TraceXmlMap(_dataArray);
			var j:int;
			var i:int=0;
			
			
			for each(var XmlObject:XML in _datas.children()){
				a_GroundMap[i] = new Array();
				j=0;
				for each(var XmlParam:XML in  XmlObject.children()){
					a_GroundMap[i][j]=XmlParam.name();
					j++;
				}
				
				i++;
			}
			
			m_DisplayManager.traceMap(a_GroundMap,ORIGIN_X,ORIGIN_Y,SIZE_X,SIZE_Y);
		}
		public static function getPositionForAdress(_posx:int,_posy:int):Array{
			
			var result_x: int = ORIGIN_X + (SIZE_X/2);
			var result_y: int = ORIGIN_Y - (SIZE_Y/2);
			result_x += (_posx * SIZE_X/2);
			result_y += ((_posy-_posx) * SIZE_Y/2);
			return new Array(result_x,result_y);
		
		}
		
	}
}